package jukebox.controller;

import java.io.File;
import java.io.FileInputStream;
import java.io.OutputStream;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.util.FileCopyUtils;
import org.springframework.web.servlet.view.AbstractView;

public class DownloadView extends AbstractView {

	@Override
	protected void renderMergedOutputModel(Map<String, Object> map,
			HttpServletRequest request, HttpServletResponse response){
		// TODO Auto-generated method stub
		
	    try {
	    	String path = (String) map.get("path");
			String newfilename = request.getParameter("newFile");
			String orgfilename = request.getParameter("orgFile");
			File file = new File(path+newfilename);
			
			if(file!=null&&file.exists()){
				 // 파일 다운로드 
			    response.setContentType(this.getContentType());
			    response.setContentLength((int)file.length());//파일 크기 설정 
			    // 다운로드 파일에 대한 설정 
				response.setHeader("Content-Disposition", 
				  "attachment; fileName="
				+new String(orgfilename.getBytes("UTF-8"),"8859_1"));
				
				//데이터 인코딩이 바이너리 파일임을 명시
			    response.setHeader("Content-Transfer-encoding", "binary");
			    
			    // response에 연결된 OutputStream
			    OutputStream os = response.getOutputStream();
			    // 업로드된 파일을 입력받기 위한 입력스트림
			    FileInputStream fis = new FileInputStream(file);
			    FileCopyUtils.copy(fis, os);
			}else{
				//response.sendError(401, "음악파일이 존재하지않습니다.");
				/*request.setAttribute("fileError", true);
				String referer = request.getHeader("referer");
				referer=referer.substring(referer.indexOf("jukeboxproject/")+"jukeboxproject/".length());
				request.getRequestDispatcher(referer).forward(request, response);*/
				String referer = request.getHeader("referer");
				System.out.println(referer);
				if(referer.contains("fileError")){
					System.out.println("erroe");
					response.sendRedirect(referer);
				}else{
					response.sendRedirect(referer+"&fileError=true");
				}
				
			}
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	    
	}

}
